﻿using System;
using System.ComponentModel;
using System.Data;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;

namespace Siav
{
    public partial class frmPedido : Form
    {
        public frmPedido()
        {
            InitializeComponent();
        }

        //Entidades
        SiavEntities Entidades = new SiavEntities();

        public int CodigoUserVenda;
        public int CodigoItem = -1;

        public void NumeroVendedor(int pVendedor)
        {
            if (pVendedor != 0)
            {
                lblCodigoVendedor.Text =  pVendedor.ToString();
            }
        }
        /// <summary>
        /// Buscar o cliente pelo código    
        /// </summary>
        /// <param name="pCodigoCliente"></param>
        public void CarregaCliente(string pCodigoCliente)
        {
            if (pCodigoCliente == "")
            {
                MessageBox.Show("Informe o código do cliente!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtCodigoCliente.Focus();
            }
            else
            {
                try
                {
                    int Codigo = int.Parse(pCodigoCliente);
                    if (Codigo != -1)
                    {
                        var ClienteSelecionado = (from cliente in Entidades.Clientes
                                                  where cliente.Codigo.Equals(Codigo)
                                                  select cliente).FirstOrDefault();

                        txtCodigoCliente.Text = ClienteSelecionado.Codigo.ToString();
                        txtRazaoCliente.Text = String.Format("{0} / {1}", ClienteSelecionado.NomeFantasia, ClienteSelecionado.RazaoSocial);
                        grpParametros.Enabled = true;
                        cboCondPag.Focus();
                        //Carrega os dados da transportadora se existir no cadastro do cliente
                        if (ClienteSelecionado.TransportadoraPadrao.ToString() != "")
                        {
                            txtCodigoTransp.Text = ClienteSelecionado.TransportadoraPadrao.ToString();
                            TransportadoraDados(ClienteSelecionado.TransportadoraPadrao.ToString());
                        }
                        if (ClienteSelecionado.Observacoes != null)
                        {
                            Validacoes.Aviso(ClienteSelecionado.Observacoes);
                        }

                    }

                }
                catch
                {
                    MessageBox.Show("Código do Cliente inválido!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    txtCodigoCliente.Focus();
                }
            }
        }


        public void CondicaoPagamento()
        {
            var Cond = (from condi in Entidades.CondPagamento
                        select condi).ToList();
            cboCondPag.DataSource = Cond;
            cboCondPag.DisplayMember = "cond_nome";
            cboCondPag.ValueMember = "cond_codigo";
        }

        public void Cfop()
        {
            var cfops = (from cf in Entidades.CFOP
                         orderby cf.cfop_nome
                         select cf).ToList();
            cboCFOP.DataSource = cfops;
            cboCFOP.DisplayMember = "cfop_nome";
            cboCFOP.ValueMember = "cfop_numero";
        }

        /// <summary>
        /// Retorna todos os dados da transportadora especificada pelo código
        /// </summary>
        /// <param name="pCodigoTransportadora"></param>
        public void TransportadoraDados(string pCodigoTransportadora)
        {

            if (pCodigoTransportadora == "")
            {
                MessageBox.Show("Informe o código da transportadora", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            else
            {
                try
                {
                    int Codigot = int.Parse(pCodigoTransportadora.ToString());
                    if (Codigot != -1)
                    {
                        var TTransportadoras = Entidades.Transportadoras.FirstOrDefault(tr => tr.TCodigo.Equals(Codigot));
                        txtNomeTransportadora.Text = TTransportadoras.NomeRazao;
                        txtObservacoes.Focus();
                    }
                }
                catch
                {
                    MessageBox.Show("Transportadora não encontrada, Verifique!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        public void CarregaProdutos()
        {
            var Prods = (from produto in Entidades.Produtos
                         orderby produto.NomeProduto
                         select produto).ToList();
            cboProdutos.DataSource = Prods;
            cboProdutos.DisplayMember = "NomeProduto";
            cboProdutos.ValueMember = "Codigo";
        }

        public void CarregaPigmentacao()
        {
            var Pig = (from pigs in Entidades.Pigmentacao
                       orderby pigs.Codigo
                       select pigs).ToList();
            cboPigmentacao.DataSource = Pig;
            cboPigmentacao.DisplayMember = "Descricao";
            cboPigmentacao.ValueMember = "Codigo";
        }

        private void CarregatiposDeMaterial()
        {
            using (SiavEntities Entidades = new SiavEntities())
            {
                var Mat = Entidades.Material.OrderBy(Mate => Mate.Descricao).ToList();
                cboTipoDeMaterial.DataSource = Mat;
                cboTipoDeMaterial.DisplayMember = "Descricao";
                cboTipoDeMaterial.ValueMember = "Codigo";
            }

        }



        public void Calculos(string pTipoCalculo, string pQuantidade, string pLargura, string pAltura, string pEspessura, string pValor)
        {
            try
            {
                if (pQuantidade == "")
                {
                    pQuantidade = "1";
                }
                if (pLargura == "")
                {
                    pLargura = "0";
                }
                if (pAltura == "")
                {
                    pAltura = "0";
                }
                if (pEspessura == "")
                {
                    pEspessura = "0";
                }
                if (pValor == "")
                {
                    pValor = "0";
                }

                decimal Quantidade = decimal.Parse(pQuantidade);
                decimal Largura = decimal.Parse(pLargura);
                decimal Altura = decimal.Parse(pAltura);
                decimal Espessura = decimal.Parse(pEspessura);
                decimal Valor = decimal.Parse(pValor);

                decimal PesoMilheiro = (Largura * Altura * Espessura);
                decimal ValorPorMilheiro = (PesoMilheiro * Valor);
                decimal ValorTotal = (ValorPorMilheiro * Quantidade);
                ValorPorMilheiro = (ValorTotal) / Quantidade;
                decimal PesoTotal = PesoMilheiro * Quantidade;



                NumberFormatInfo nfi = new CultureInfo("pt-br", false).NumberFormat;
                nfi.CurrencyDecimalDigits = 2;

                if (pTipoCalculo == "ML")
                {
                    txtLargura.Enabled = true;
                    txtAltura.Enabled = true;
                    txtEspessura.Enabled = true;
                    txtValorTotalProd.Text = ValorTotal.ToString("C", nfi);
                    txtValorMilheiro.Text = ValorPorMilheiro.ToString("C", nfi);
                    nfi.NumberDecimalDigits = 3;
                    txtPesoMilheiro.Text = PesoMilheiro.ToString("N", nfi);
                    txtPesoTotal.Text = PesoTotal.ToString("N", nfi);
                }
                if (pTipoCalculo == "KG")
                {
                    txtValorMilheiro.Text = "0,00";
                    txtPesoMilheiro.Text = "0,00";
                    txtValorTotalProd.Text = (Valor * Quantidade).ToString("C", nfi);
                    nfi.NumberDecimalDigits = 3;
                    txtPesoTotal.Text = Quantidade.ToString("N", nfi);
                }

            }
            catch
            {
                MessageBox.Show("Informe apenas dados numericos", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void CriarPedido()
        {
            try
            {
                PedidoCabeca pC = new PedidoCabeca();
                pC.CodigoCliente = int.Parse(txtCodigoCliente.Text);
                pC.CondPagamento = int.Parse(cboCondPag.SelectedValue.ToString());
                pC.FormaPagamento = txtFormaPagamento.Text;
                pC.CFOP = int.Parse(cboCFOP.SelectedValue.ToString());
                pC.EntregaDomicilio = cboEntregaDomicilio.Text;
                pC.DataEntrega = DateTime.Parse(txtDataEntrega.Text);
                if (txtCodigoTransp.Text != "")
                {
                    pC.Transportadora = int.Parse(txtCodigoTransp.Text);
                }

                string ModalidadeTransporte = "";

                if (rbCIF.Checked)
                {
                    ModalidadeTransporte = "0";
                }
                if (rbFOB.Checked)
                {
                    ModalidadeTransporte = "1";
                }
                if (rbTerceiros.Checked)
                {
                    ModalidadeTransporte = "2";
                }
                if(rbSemfrete.Checked)
                {
                    ModalidadeTransporte = "9";
                }

                if (ModalidadeTransporte == "")
                {
                    throw new Exception("Informe a modalidade de Frete!");
                }
                pC.ModalidadeFrete = ModalidadeTransporte;
                pC.Observacoes = txtObservacoes.Text;
                pC.DataHoraPedido = DateTime.Now;
                frmInicial Log = new frmInicial();
                pC.Vendedor = int.Parse(lblCodigoVendedor.Text);
                pC.Status = "O";
                /////////////////
                Entidades.AddObject("PedidoCabeca", pC);
                Entidades.SaveChanges();
                var vUltimoPedido = (from P in Entidades.PedidoCabeca
                                     orderby P.CodigoPedido descending
                                     select new { P.CodigoPedido }).FirstOrDefault();
                grpNumeroPedido.Visible = true;
                lblNumeroPedido.Text = vUltimoPedido.CodigoPedido.ToString();
                groupBox1.Enabled = false;
                grpParametros.Enabled = false;
                gpbDetalhesItem.Enabled = true;
                gpbListaProdutos.Enabled = true;
                ////////////////
            }
            catch (Exception ex)
            {
                Validacoes.Erro(ex.Message);
                Validacoes.Erro("Erro ao criar pedido");
            }
        }

        public void InserirProdutosNoPedido(string pNumeroPedido)
        {
            try
            {
                PedidoDetalhes Det = new PedidoDetalhes();

                Det.item_ped_codigo = int.Parse(pNumeroPedido);
                Det.item_produto = int.Parse(cboProdutos.SelectedValue.ToString());
                Det.item_unidade = cboUnidades.Text;
                Det.item_quantidade = decimal.Parse(txtQuantidade.Text);

                Det.item_altura = decimal.Parse(txtAltura.Text);
                Det.item_largura = decimal.Parse(txtLargura.Text);
                Det.item_espessura = txtEspessura.Text;
                Det.item_material = cboTipoDeMaterial.Text;
                Det.item_pigmentacao = int.Parse(cboPigmentacao.SelectedValue.ToString());
                Det.item_sanfonado = cboSanfonado.Text;
                Det.item_solda = cboSolda.Text;
                Det.item_tratamento = cboTratamento.Text;
                if (cboTratamento.Text == "SIM" || cboTratamento.Text == "F / V")
                {
                    Det.item_impressao = cboImpresso.Text;
                    Det.item_numero_cores = cboNCores.Text;
                    Det.item_descricao_cores = txtDescCores.Text;
                }
                string ValorKG = txtPreco.Text;
                string ValorTotal = txtValorTotalProd.Text;
                string ValorMilheiro = txtValorMilheiro.Text;
                string PesoMilheiro = txtPesoMilheiro.Text;
                Det.item_embalagem_para = txtEmbPara.Text;
                Det.item_valor_kg = decimal.Parse(ValorKG.Replace("R$", ""));

                Det.item_valor_total = decimal.Parse(ValorTotal.Replace("R$", ""));
                Det.item_peso_total = decimal.Parse(txtPesoTotal.Text);
                if (cboUnidades.Text == "ML")
                {
                    Det.item_valor_milheiro = decimal.Parse(ValorMilheiro.Replace("R$", ""));
                    Det.item_peso_milheiro = decimal.Parse(PesoMilheiro);
                }
                ////////////////////////////////////////////////////
                Det.item_observacoes = txtObsItem.Text;
                Entidades.AddObject("PedidoDetalhes", Det);
                Entidades.SaveChanges();
                CarregaProdutosLista(pNumeroPedido);
                LimparCamposProduto();
                //Validacoes.LimpaCamposFormulario(Controls);
            }
            catch //(EntitySqlException Ex)
            {
                MessageBox.Show("Erro, Não foi possivel inserir o produto, verifique se todos os campos foram preenchidos corretamente!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void AlterarProdutosNoPedido(string pCodigoProduto)
        {
            try
            {
                int CodigoItem = int.Parse(pCodigoProduto);
                var Det = (from Itens in Entidades.PedidoDetalhes
                           where Itens.item_codigo.Equals(CodigoItem)
                           select Itens).FirstOrDefault();

                Det.item_produto = int.Parse(cboProdutos.SelectedValue.ToString());
                Det.item_unidade = cboUnidades.Text.ToString();
                Det.item_quantidade = decimal.Parse(txtQuantidade.Text);
                Det.item_altura = decimal.Parse(txtAltura.Text);
                Det.item_largura = decimal.Parse(txtLargura.Text);
                Det.item_espessura = txtEspessura.Text;
                Det.item_material = cboTipoDeMaterial.Text;
                Det.item_pigmentacao = int.Parse(cboPigmentacao.SelectedValue.ToString());
                Det.item_sanfonado = cboSanfonado.Text;
                Det.item_solda = cboSolda.Text;
                Det.item_tratamento = cboTratamento.Text;
                if (cboTratamento.Text == "SIM" || cboTratamento.Text == "F / V")
                {
                    Det.item_impressao = cboImpresso.Text;
                    Det.item_numero_cores = cboNCores.Text;
                    Det.item_descricao_cores = txtDescCores.Text;
                }
                string ValorKG = txtPreco.Text;
                string ValorTotal = txtValorTotalProd.Text;
                string ValorMilheiro = txtValorMilheiro.Text;
                string PesoMilheiro = txtPesoMilheiro.Text;
                Det.item_embalagem_para = txtEmbPara.Text;
                Det.item_valor_kg = decimal.Parse(ValorKG.Replace("R$", ""));

                Det.item_valor_total = decimal.Parse(ValorTotal.Replace("R$", ""));
                Det.item_peso_total = decimal.Parse(txtPesoTotal.Text);
                if (cboUnidades.Text == "ML")
                {
                    Det.item_valor_milheiro = decimal.Parse(ValorMilheiro.Replace("R$", ""));
                    Det.item_peso_milheiro = decimal.Parse(PesoMilheiro);
                }
                Det.item_observacoes = txtObsItem.Text;
                ////////////////////////////////////////////////////
                //Entidades.AddObject("PedidoDetalhes", Det);
                Entidades.SaveChanges();
                CarregaProdutosLista(Det.item_ped_codigo.ToString());
                Validacoes.LimpaCamposFormulario(Controls);
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }
        }

        public void CarregaProdutosLista(string pCodigo)
        {
            lstProdutos.Items.Clear();
            int CodigoPedido = int.Parse(pCodigo);
            var Prods = (from p in Entidades.PedidoDetalhes
                         where p.item_ped_codigo.Equals(CodigoPedido)
                         select p).ToList();
            decimal totalV = 0;
            decimal preco = 0;
            decimal peso = 0;
            decimal totalP = 0;
            int i = 1;
            NumberFormatInfo nfi = new CultureInfo("pt-br", false).NumberFormat;
            nfi.CurrencyDecimalDigits = 2;
            foreach (PedidoDetalhes Ped in Prods)
            {

                ListViewItem item = new ListViewItem();
                CodigoItem = Ped.item_codigo;
                item.Text = Ped.item_codigo.ToString();
                item.SubItems.Add(i.ToString());
                item.SubItems.Add(Ped.Produtos.NomeProduto);
                item.SubItems.Add(Ped.item_quantidade.ToString());
                item.SubItems.Add(Ped.item_unidade);
                item.SubItems.Add(Ped.item_largura.ToString());
                item.SubItems.Add(Ped.item_altura.ToString());
                item.SubItems.Add(Ped.item_espessura.ToString());
                item.SubItems.Add(Ped.item_valor_kg.Value.ToString("N", nfi));
                item.SubItems.Add(Ped.item_peso_total.ToString());
                item.SubItems.Add(Ped.item_valor_total.Value.ToString("N", nfi));
                item.SubItems.Add(Ped.item_codigo.ToString());
                lstProdutos.Items.Add(item);
                string Vvalor = item.SubItems[10].Text;
                string Vpeso = item.SubItems[9].Text;
                preco = decimal.Parse(Vvalor);
                peso = decimal.Parse(Vpeso);
                totalV = totalV + preco;
                totalP = totalP + peso;
                i++;
            }
            //LimpaCampos();
            txtValorPedido.Text = totalV.ToString("N", nfi);
            nfi.NumberDecimalDigits = 3;
            txtPesoPedido.Text = totalP.ToString("N", nfi);


        }

        public void LimparCamposProduto()
        {
            cboProdutos.SelectedValue = -1;
            cboUnidades.Text = string.Empty;
            txtQuantidade.Text = string.Empty;
            txtLargura.Text = string.Empty;
            txtAltura.Text = string.Empty;
            txtEspessura.Text = string.Empty;
            cboTipoDeMaterial.Text = string.Empty;
            cboPigmentacao.SelectedValue = -1;
            cboSanfonado.Text = string.Empty;
            cboSolda.Text = string.Empty;
            cboTratamento.Text = string.Empty;
            cboImpresso.Text = string.Empty;
            cboNCores.Text = string.Empty;
            txtDescCores.Text = string.Empty;
            txtEmbPara.Text = string.Empty;
            txtPreco.Text = string.Empty;
            txtObsItem.Text = string.Empty;
        }

        public void CarregaDetallhesDoItemSelecionado(string pItem)
        {
            try
            {
                int CodigoItem = int.Parse(pItem);
                var detItem = (from item in Entidades.PedidoDetalhes
                               where item.item_codigo.Equals(CodigoItem)
                               select item).FirstOrDefault();

                cboProdutos.SelectedValue = detItem.item_produto;
                cboUnidades.Text = detItem.item_unidade;
                txtQuantidade.Text = detItem.item_quantidade.ToString();
                txtLargura.Text = detItem.item_largura.ToString();
                txtAltura.Text = detItem.item_altura.ToString();
                txtEspessura.Text = detItem.item_espessura.ToString();
                cboTipoDeMaterial.Text = detItem.item_material;
                cboPigmentacao.SelectedValue = int.Parse(detItem.item_pigmentacao.ToString());
                cboSanfonado.Text = detItem.item_sanfonado.Replace(" ", "");
                cboSolda.Text = detItem.item_solda;
                cboTratamento.Text = detItem.item_tratamento;
                cboImpresso.Text = detItem.item_impressao;
                cboNCores.Text = detItem.item_numero_cores;
                txtDescCores.Text = detItem.item_descricao_cores;
                txtEmbPara.Text = detItem.item_embalagem_para;
                txtObsItem.Text = detItem.item_observacoes;
                txtPreco.Text = detItem.item_valor_kg.ToString();
            }
            catch (Exception eX)
            {
                MessageBox.Show(eX.Message.ToString());
            }

        }
        private void btnFormarPedido_Click(object sender, EventArgs e)
        {
            CriarPedido();
        }

        private void frmPedido_Load(object sender, EventArgs e)
        {
            frmInicial Inici = new frmInicial();
            CondicaoPagamento();
            Cfop();
            cboEntregaDomicilio.Text = "NÃO";
            CarregaProdutos();
            CarregaPigmentacao();
            CarregatiposDeMaterial();
            txtCdPedido.Focus();
            CodigoUserVenda = Inici.CodigoUsuario;
        }

        private void txtCodigoCliente_Leave(object sender, EventArgs e)
        {
            if (txtCodigoCliente.Text == "")
            {
                txtCdPedido.Focus();
            }
            else
            {
                CarregaCliente(txtCodigoCliente.Text);
            }
        }

        private void btnLocCliente_Click(object sender, EventArgs e)
        {
            frmPesquisaCliente PesqCliente = new frmPesquisaCliente();
            PesqCliente.ShowDialog();
            CarregaCliente(PesqCliente.CodigoSelecionado);
        }

        private void frmPedido_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Enter:
                    this.SelectNextControl(this.ActiveControl, !e.Shift, true, true, true);
                    break;
            }
        }

        private void cboEntregaDomicilio_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboEntregaDomicilio.Text == "SIM")
            {
                txtCodigoTransp.Enabled = true;
            }
            else
            {
                txtCodigoTransp.Enabled = false;
                txtObservacoes.Focus();
            }
        }

        private void txtCodigoTransp_Leave(object sender, EventArgs e)
        {
            if (txtCodigoTransp.Text != "")
            {
                TransportadoraDados(txtCodigoTransp.Text);
            }
        }

        private void cboTratamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboTratamento.Text == "NÃO")
            {
                cboImpresso.Enabled = false;
                cboNCores.Enabled = false;
                cboImpresso.Text = "NÃO";
                cboNCores.Text = "0";
                txtDescCores.Text = string.Empty;
                txtDescCores.Enabled = false;
            }
            else
            {
                cboImpresso.Enabled = true;
                cboNCores.Enabled = true;
                txtDescCores.Enabled = true;
                cboImpresso.Text = "SIM";
                cboNCores.Focus();
            }
        }

        private void btnInserirItem_Click(object sender, EventArgs e)
        {
            InserirProdutosNoPedido(lblNumeroPedido.Text);
        }

        private void cboProdutos_Validating(object sender, CancelEventArgs e)
        {
            if (cboProdutos.SelectedValue.ToString() == "")
            {
                Validacao.SetError(cboProdutos, "Selecione o produto");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(cboProdutos, "");
            }
        }

        private void cboTipoDeMaterial_Validating(object sender, CancelEventArgs e)
        {
            if (cboTipoDeMaterial.Text == "")
            {
                Validacao.SetError(cboTipoDeMaterial, "Selecione o tipo de material");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(cboTipoDeMaterial, "");
            }
        }

        private void cboUnidades_Validating(object sender, CancelEventArgs e)
        {
            if (cboUnidades.Text == "")
            {
                Validacao.SetError(cboUnidades, "Tipo de unidade para calculo");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(cboUnidades, "");
            }
        }

        private void cboSanfonado_Validating(object sender, CancelEventArgs e)
        {
            if (cboSanfonado.Text == "")
            {
                Validacao.SetError(cboSanfonado, "Sanfonado?");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(cboSanfonado, "");
            }
        }

        private void cboTratamento_Validating(object sender, CancelEventArgs e)
        {
            if (cboTratamento.Text == "")
            {
                Validacao.SetError(cboTratamento, "Tratamento?");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(cboTratamento, "");
            }
        }

        private void cboEmbalgemPara_Validating(object sender, CancelEventArgs e)
        {
            if (txtEmbPara.Text == "")
            {
                Validacao.SetError(txtEmbPara, "Qual a finalidade da embalagem?");
                e.Cancel = true;
            }
            else
            {
                Validacao.SetError(txtEmbPara, "");
            }
        }

        // private void cboSolda_Validating(object sender, CancelEventArgs e)
        //{
        //if (cboSolda.Text == "")
        //{
        //   Validacao.SetError(cboSolda, "A Solda vai ficar onde?");
        // e.Cancel = true;
        // }
        //else
        //{
        //   Validacao.SetError(cboSolda, "");
        //}
        //}

        private void txtQuantidade_TextChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);
        }

        private void txtLargura_TextChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);

        }

        private void txtAltura_TextChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);

        }

        private void txtEspessura_TextChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);

        }

        private void txtPreco_TextChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);

        }

        private void txtEspessura_Enter(object sender, EventArgs e)
        {
            txtEspessura.Text = "0,001";
        }

        private void cboUnidades_SelectedIndexChanged(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);
        }

        private void btnLimparCampos_Click(object sender, EventArgs e)
        {
            AlterarProdutosNoPedido(lblCodigoItem.Text);
            LimparCamposProduto();
            btnLimparCampos.Visible = false;
        }

        private void lstProdutos_Enter(object sender, EventArgs e)
        {

        }

        private void lstProdutos_Leave(object sender, EventArgs e)
        {

        }

        private void lstProdutos_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {

        }

        private void btnAlterarItem_Click(object sender, EventArgs e)
        {
            try
            {
                CarregaDetallhesDoItemSelecionado(lstProdutos.SelectedItems[0].Text.ToString());
                btnLimparCampos.Visible = true;
                lblCodigoItem.Text = lstProdutos.SelectedItems[0].Text;
            }
            catch
            {
                MessageBox.Show("Selecione algum item para poder alterar!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

        }

        private void btnExcluirItem_Click(object sender, EventArgs e)
        {
            try
            {
                int Codigo = int.Parse(lstProdutos.SelectedItems[0].Text);

                if (MessageBox.Show("Tem certeza que deseja excluir o item selecionado?", "Questão", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    var Item = Entidades.PedidoDetalhes.FirstOrDefault(p => p.item_codigo.Equals(Codigo));
                    Entidades.DeleteObject(Item);
                    Entidades.SaveChanges();
                    CarregaProdutosLista(lblNumeroPedido.Text);
                }
            }
            catch
            {
                MessageBox.Show("Selecione algum item para poder excluir!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        public void btnCarregarPedido_Click(object sender, EventArgs e)
        {
            try
            {
                if (txtCdPedido.Text != "-1")
                {
                    int CodigoPedido = int.Parse(txtCdPedido.Text);
                    var Pedido = Entidades.PedidoCabeca.FirstOrDefault(ped => ped.CodigoPedido.Equals(CodigoPedido));
                    txtCodigoCliente.Text = Pedido.CodigoCliente.ToString();
                    CarregaCliente(txtCodigoCliente.Text);
                    cboCondPag.SelectedValue = Pedido.CondPagamento;
                    cboCFOP.SelectedValue = Pedido.CFOP;
                    cboEntregaDomicilio.Text = Pedido.EntregaDomicilio;
                    txtDataEntrega.Text = Pedido.DataEntrega.ToShortDateString();
                    if (Pedido.Transportadora.ToString() != "")
                    {
                        txtCodigoTransp.Text = Pedido.Transportadora.ToString();
                        TransportadoraDados(txtCodigoTransp.Text);
                    }
                    txtObservacoes.Text = Pedido.Observacoes;
                    CarregaProdutosLista(txtCdPedido.Text);
                    lblNumeroPedido.Text = CodigoPedido.ToString();
                    if (Pedido.Status == "F" || Pedido.Status == "E") // P em produção - F finalizado
                    {
                        groupBox1.Enabled = false;
                        //groupBox2.Enabled = false;
                        grpParametros.Enabled = false;
                        gpbDetalhesItem.Enabled = false;
                        gpbListaProdutos.Enabled = true;
                        gpbFinalizacao.Enabled = false;
                    }
                    else
                    {
                        groupBox1.Enabled = false;
                        //groupBox2.Enabled = false;
                        gpbDetalhesItem.Enabled = true;
                        gpbListaProdutos.Enabled = true;
                        gpbFinalizacao.Enabled = true;
                        grpNumeroPedido.Visible = true;
                        grpParametros.Enabled = false;
                    }
                    //groupBox3.Enabled = true;
                    //groupBox4.Enabled = true;
                }
            }
            catch
            {
                MessageBox.Show("Pedido não encontrado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalvarOrcamento_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnLocalizarPedido_Click(object sender, EventArgs e)
        {
            frmPesquisaPedidos pP = new frmPesquisaPedidos();
            pP.ShowDialog();
            txtCdPedido.Text = pP.CodigoSelecionado.ToString();
            btnCarregarPedido_Click(sender, e);

        }

        private void btnEnviarProducao_Click(object sender, EventArgs e)
        {


        }

        private void btnBuscaTransportadora_Click(object sender, EventArgs e)
        {
            frmPesquisaTransportadoras pTransp = new frmPesquisaTransportadoras();
            pTransp.ShowDialog();
            var CodTransp = pTransp.CodigoSelecionado;
            TransportadoraDados(CodTransp);
            txtCodigoTransp.Text = CodTransp;
        }

        private void cboProdutos_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int Produto = int.Parse(cboProdutos.SelectedValue.ToString());
                var Subs = (from Sub in Entidades.SubCategorias
                            where Sub.medProduto == Produto
                            select Sub).ToList();
                if (Subs.Count > 0)
                {
                    frmSelecionaSubCategoria SubF = new frmSelecionaSubCategoria();
                    SubF.ProdutoSelecionado = int.Parse(cboProdutos.SelectedValue.ToString());
                    SubF.ShowDialog();
                    var SubSelecionada = Entidades.SubCategorias.FirstOrDefault(su => su.medCodigo == SubF.CodigoSub);
                    cboUnidades.Text = SubSelecionada.medUnidade;
                    txtAltura.Text = SubSelecionada.medAltura.ToString();
                    txtLargura.Text = SubSelecionada.medLargura.ToString();
                    txtEspessura.Text = SubSelecionada.medEspessura;
                    cboTipoDeMaterial.Text = SubSelecionada.medTipoMaterial;
                    cboPigmentacao.SelectedValue = SubSelecionada.medPigmentacao;
                    cboSanfonado.Text = SubSelecionada.medSanfonado;
                    cboSolda.Text = SubSelecionada.medSolda;
                    cboTratamento.Text = SubSelecionada.medTratamento;
                    txtEmbPara.Text = SubSelecionada.medEmbPara;
                    txtPreco.Text = SubSelecionada.medPreco.ToString();

                }
            }
            catch
            {

            }
        }

        private void btnEnviarProducao_Click_1(object sender, EventArgs e)
        {
            try
            {
                int CodigoP = Convert.ToInt32(lblNumeroPedido.Text);
                var pedidoAAtualizar = Entidades.PedidoCabeca.FirstOrDefault(ped => ped.CodigoPedido.Equals(CodigoP));

                pedidoAAtualizar.Status = "P";
                //Campo atualizado, pois estava pegando valor incorreto!
                pedidoAAtualizar.PesoTotalPedido = txtPesoPedido.Text;
                ////////////////////////////////////////////////////////

                Entidades.ObjectStateManager.ChangeObjectState(pedidoAAtualizar, EntityState.Modified);
                Entidades.SaveChanges();
                if (MessageBox.Show("Pedido enviado para produção. Deseja imprimir a guia?", "Questão", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    frmFichaPedido Ficha = new frmFichaPedido();
                    Ficha.CodigoPedido = int.Parse(lblNumeroPedido.Text);
                    Ficha.ShowDialog();
                    Close();
                }
                else
                {
                    Close();
                }
            }
            catch
            {
                MessageBox.Show("Erro ao enviar o pedido para a produção", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnAlterarItem_Click_1(object sender, EventArgs e)
        {

        }

        private void btnExcluirItem_Click_1(object sender, EventArgs e)
        {

        }

        private void btnSalvarOrcamento_Click_1(object sender, EventArgs e)
        {

        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            try
            {
                int CodigoPedido = int.Parse(lblNumeroPedido.Text);
                frmFichaPedido ficha = new frmFichaPedido();
                ficha.CodigoPedido = CodigoPedido;
                ficha.ShowDialog();
                ficha.Dispose();
            }
            catch
            {
                MessageBox.Show("Erro ao tentar imprimir o pedido / orçamento!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnObservacoesPedido_Click(object sender, EventArgs e)
        {
            Validacoes.NumeroPedido = int.Parse(lblNumeroPedido.Text);
            using (frmObsPedido Obs = new frmObsPedido())
            {
                Obs.ShowDialog();
                Obs.Dispose();
            }
        }

        private void txtLargura_TextChanged_1(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);
        }

        private void txtAltura_TextChanged_1(object sender, EventArgs e)
        {
            Calculos(cboUnidades.Text, txtQuantidade.Text, txtLargura.Text, txtAltura.Text, txtEspessura.Text, txtPreco.Text);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                int CodigoP = Convert.ToInt32(lblNumeroPedido.Text);
                var pedidoAAtualizar = Entidades.PedidoCabeca.FirstOrDefault(ped => ped.CodigoPedido.Equals(CodigoP));

                //pedidoAAtualizar.Status = "P";
                //Campo atualizado, pois estava pegando valor incorreto!
                pedidoAAtualizar.PesoTotalPedido = txtPesoPedido.Text;
                ////////////////////////////////////////////////////////

                Entidades.ObjectStateManager.ChangeObjectState(pedidoAAtualizar, EntityState.Modified);
                Entidades.SaveChanges();
                Validacoes.Informacao("Pronto, sem erros");

            }
            catch
            {
                MessageBox.Show("Erro ao enviar o pedido para a produção", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }






        // foreach (ListViewItem itens in ls)
        // {
        // /     // os valores na ListView não são do tipo double
        //     string valor = item.SubItems[4].Text;

        // vamos converter para double
        //     double preco = double.Parse(valor);

        // vamos adicionar o valor deste item à soma atual
        //     total = total + preco;
        //      txtTotal.Text = total.ToString();
        //       txtFinal.Text = txtTotal.Text;
        // }

    }
}

